hooks.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { PermissionAction } from '@supabase/shared-types/out/constants'
  2. import { GenericSkeletonLoader } from 'ui-patterns'
  3. import { PageContainer } from 'ui-patterns/PageContainer'
  4. import {
  5. PageHeader,
  6. PageHeaderAside,
  7. PageHeaderDescription,
  8. PageHeaderMeta,
  9. PageHeaderSummary,
  10. PageHeaderTitle,
  11. } from 'ui-patterns/PageHeader'
  12. import { PageSection, PageSectionContent } from 'ui-patterns/PageSection'
  13. import { HooksListing } from '@/components/interfaces/Auth/Hooks/HooksListing'
  14. import AuthLayout from '@/components/layouts/AuthLayout/AuthLayout'
  15. import DefaultLayout from '@/components/layouts/DefaultLayout'
  16. import { DocsButton } from '@/components/ui/DocsButton'
  17. import NoPermission from '@/components/ui/NoPermission'
  18. import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions'
  19. import { DOCS_URL } from '@/lib/constants'
  20. import type { NextPageWithLayout } from '@/types'
  21. const Hooks: NextPageWithLayout = () => {
  22. const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions(
  23. PermissionAction.READ,
  24. 'custom_config_gotrue'
  25. )
  26. if (isPermissionsLoaded && !canReadAuthSettings) {
  27. return <NoPermission isFullPage resourceText="access your project's auth hooks" />
  28. }
  29. return (
  30. <>
  31. <PageHeader size="default">
  32. <PageHeaderMeta>
  33. <PageHeaderSummary>
  34. <PageHeaderTitle>Auth Hooks</PageHeaderTitle>
  35. <PageHeaderDescription>Customize your authentication flow</PageHeaderDescription>
  36. </PageHeaderSummary>
  37. <PageHeaderAside>
  38. <DocsButton href={`${DOCS_URL}/guides/auth/auth-hooks`} />
  39. </PageHeaderAside>
  40. </PageHeaderMeta>
  41. </PageHeader>
  42. <PageContainer size="default">
  43. {!isPermissionsLoaded ? (
  44. <PageSection>
  45. <PageSectionContent>
  46. <GenericSkeletonLoader />
  47. </PageSectionContent>
  48. </PageSection>
  49. ) : (
  50. <HooksListing />
  51. )}
  52. </PageContainer>
  53. </>
  54. )
  55. }
  56. Hooks.getLayout = (page) => (
  57. <DefaultLayout>
  58. <AuthLayout title="Auth Hooks">{page}</AuthLayout>
  59. </DefaultLayout>
  60. )
  61. export default Hooks